package cn.iocoder.yudao.module.ride.controller.admin.orders.vo;

import io.swagger.v3.oas.annotations.media.Schema;
import lombok.*;
import java.util.*;
import java.math.BigDecimal;
import org.springframework.format.annotation.DateTimeFormat;
import java.time.LocalDateTime;
import cn.idev.excel.annotation.*;
import cn.iocoder.yudao.framework.excel.core.annotations.DictFormat;
import cn.iocoder.yudao.framework.excel.core.convert.DictConvert;

@Schema(description = "管理后台 - 订单管理 Response VO")
@Data
@ExcelIgnoreUnannotated
public class OrderRespVO {

    @Schema(description = "订单ID", requiredMode = Schema.RequiredMode.REQUIRED)
    @ExcelProperty("订单ID")
    private Integer orderId;

    @Schema(description = "订单号", requiredMode = Schema.RequiredMode.REQUIRED)
    @ExcelProperty("订单号")
    private String orderNo;

    @Schema(description = "乘客ID", requiredMode = Schema.RequiredMode.REQUIRED)
    @ExcelProperty("乘客ID")
    private Long userId;

    @Schema(description = "城市")
    @ExcelProperty("城市")
    private String city;

    @Schema(description = "车辆类型")
    @ExcelProperty(value = "车辆类型", converter = DictConvert.class)
    @DictFormat("vehicle_type") // TODO 代码优化：建议设置到对应的 DictTypeConstants 枚举类中
    private Integer vehicleClass;

    @Schema(description = "订单状态ID")
    @ExcelProperty(value = "订单状态ID", converter = DictConvert.class)
    @DictFormat("order_type") // TODO 代码优化：建议设置到对应的 DictTypeConstants 枚举类中
    private Integer orderStatus;

    @Schema(description = "上车地点")
    @ExcelProperty("上车地点")
    private String pickupLocation;

    @Schema(description = "下车地点")
    @ExcelProperty("下车地点")
    private String dropoffLocation;

    @Schema(description = "起点名称")
    @ExcelProperty("起点名称")
    private String start;

    @Schema(description = "起点城市")
    @ExcelProperty("起点城市")
    private String startCity;

    @Schema(description = "起点详细地址")
    @ExcelProperty("起点详细地址")
    private String startAddress;

    @Schema(description = "起点纬度")
    @ExcelProperty("起点纬度")
    private BigDecimal startLatitude;

    @Schema(description = "起点经度")
    @ExcelProperty("起点经度")
    private BigDecimal startLongitude;

    @Schema(description = "终点名称")
    @ExcelProperty("终点名称")
    private String end;

    @Schema(description = "终点城市")
    @ExcelProperty("终点城市")
    private String endCity;

    @Schema(description = "终点详细地址")
    @ExcelProperty("终点详细地址")
    private String endAddress;

    @Schema(description = "终点纬度")
    @ExcelProperty("终点纬度")
    private BigDecimal endLatitude;

    @Schema(description = "终点经度")
    @ExcelProperty("终点经度")
    private BigDecimal endLongitude;

    @Schema(description = "订单金额(元)")
    @ExcelProperty("订单金额(元)")
    private BigDecimal orderAmount;

    @Schema(description = "服务时长(分钟)")
    @ExcelProperty("服务时长(分钟)")
    private Integer serviceDuration;

    @Schema(description = "服务里程(公里)")
    @ExcelProperty("服务里程(公里)")
    private BigDecimal serviceDistance;

    @Schema(description = "下单来源")
    @ExcelProperty(value = "下单来源", converter = DictConvert.class)
    @DictFormat("order_from") // TODO 代码优化：建议设置到对应的 DictTypeConstants 枚举类中
    private Integer fromId;

    @Schema(description = "支付类型")
    @ExcelProperty(value = "支付类型", converter = DictConvert.class)
    @DictFormat("pay_type") // TODO 代码优化：建议设置到对应的 DictTypeConstants 枚举类中
    private Integer payId;

    @Schema(description = "联系手机号")
    @ExcelProperty("联系手机号")
    private String mobile;

    @Schema(description = "预约时间")
    @ExcelProperty("预约时间")
    private LocalDateTime appointmentTime;

    @Schema(description = "状态文本")
    @ExcelProperty("状态文本")
    private String statusText;

    @Schema(description = "备注")
    @ExcelProperty("备注")
    private String remark;

    @Schema(description = "司机ID")
    @ExcelProperty("司机ID")
    private Long driverId;

}
